package com.liuyz;

import java.util.LinkedList;

@SuppressWarnings({"all"})
public class LinkedList_ {

    public static void main(String[] args) {
        // m1();
        m2();
    }

    static void m1() {
        // 模拟一个简单的双向链表

        // 构建三个节点对象
        Node node1 = new Node("节点1");
        Node node2 = new Node("节点2");
        Node node3 = new Node("节点3");

        // 让节点的next属性指向对应的节点
        node1.next = node2;
        node2.next = node3;

        // 让节点的prev属性指向对应的节点
        node3.prev = node2;
        node2.prev = node1;

        // 从首到尾遍历
        System.out.println("---从首到尾遍历---");
        Node first = node1;
        while (true) {
            if (first == null) {
                break;
            }
            System.out.println(first);
            first = first.next;
        }

        // 从尾到首遍历
        System.out.println("---从尾到首遍历---");
        Node last = node3;
        while (true) {
            if (last == null) {
                break;
            }
            System.out.println(last);
            last = last.prev;
        }

        // 在第二个元素和第三个元素之间添加新元素
        // 定义新节点
        Node nodeNew = new Node("节点_新增");
        // 让新节点的next指向第三个元素
        nodeNew.next = node3;
        // 让新节点的prev指向第二个元素
        nodeNew.prev = node2;
        // 让第三个元素的prev指向新节点
        node3.prev = nodeNew;
        // 让第二个元素的next指向新节点
        node2.next = nodeNew;

        // 从首到尾遍历（新增后）
        System.out.println("---从首到尾遍历（新增后）---");
        first = node1;
        while (true) {
            if (first == null) {
                break;
            }
            System.out.println(first);
            first = first.next;
        }

        // 从尾到首遍历（新增后）
        System.out.println("---从尾到首遍历（新增后）---");
        last = node3;
        while (true) {
            if (last == null) {
                break;
            }
            System.out.println(last);
            last = last.prev;
        }

        // 当前为4个元素，删除第二个元素
        // 让第一个元素的next指向第三个元素
        node1.next = nodeNew;
        // 让第三个元素的prev指向第一个元素
        nodeNew.prev = node1;

        // 从首到尾遍历（删除后）
        System.out.println("---从首到尾遍历（删除后）---");
        first = node1;
        while (true) {
            if (first == null) {
                break;
            }
            System.out.println(first);
            first = first.next;
        }

        // 从尾到首遍历（删除后）
        System.out.println("---从尾到首遍历（删除后）---");
        last = node3;
        while (true) {
            if (last == null) {
                break;
            }
            System.out.println(last);
            last = last.prev;
        }
    }

    static void m2() {
        LinkedList linkedList = new LinkedList();
        linkedList.add("测试1");
        linkedList.add("测试2");
        linkedList.add("测试3");
        linkedList.add("测试4");
    }
}

// 自定义简单节点
class Node {

    // 指向前一个节点
    Node prev;

    // 指向后一个节点
    Node next;

    // 节点内的元素本身（存放数据的地方）
    String item;

    public Node(String item) {
        this.item = item;
    }

    @Override
    public String toString() {
        return "Node{" +
                "item=" + item +
                '}';
    }
}
